AVR TIMER0 treating with prescaler and without to blink a led
total_overflow will never be larger than 1568 because you are using an 8bit unsigned integer for the job, which can only count to 256 (0-255). Change 

volatile uint8_t total_overflow;


to 

volatile uint16_t total_overflow;


so that your variable can hold high enough values. 

EDIT: Also, you should move the declaration of your total_overflow to main instead of having it global and set it to 0 straight away.

int main(void){
    uint16_t total_overflow = 0;
    (...)
    while(1){
        (...)


EDIT2: Sorry, disregard first edit as I didn't see you increasing the variable in interrupt context.