The problem is created by the Arrays managed in the function SetTime.
if you try to move the declaration part
//Timers
unsigned long LastTimeLoop;
int Ore[MaxTimers];
int Minuti[MaxTimers];
int Secondi[MaxTimers];
int Millisecondi[MaxTimers];
int TimerName[MaxTimers];
int TimerEnabled[MaxTimers];at the end of the declaration seems to wotrk fine....
If you move the array declarations around, all that you are doing is changing what gets stepped on when the Arduino runs out of memory. That it appears to then "wotrk fine" simply means that you are not seeing, or are not concerned about, what is now getting stepped on.
The point is that you ARE running out of memory.