By using your own main() function you bypass the normal calls to the Arduino initialisation functions. Could that be a factor ?
If you put your code in setup() instead of main() you get this error
wiring.c.o (symbol from plugin): In function `__vector_16':
(.text+0x0): multiple definition of `__vector_16'
C:\Users\micro\AppData\Local\arduino\sketches\D3B0D7D7238C1380270C11B10B346A24\sketch\sketch_jul25a.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Compilation error: exit status 1
I bypaased setup() and loop() to get rid of all standard clutter. I'm familiar with that, and it contains nothing that I didn't initialize myself, as far as I can see.
In the disassembled hex file I see the interrupt vectors and the handlers. It looks like the interrupts of timer1 and timer2 are never triggerd. So maybe I'm missing something.