The 16MHz clock does not divide evenly to a multiple of a second and the frequency is much too high for the arduino timers to produce a pulse per second. That's the bad news, the good news is that you don't need a timer to do what you want.
Here is a version of loop that uses the Arduino millis function to increment your variables.
void loop () {
if( millis() - prevMillis >= 1000)
{
seconds = seconds + 1; // Increment the seconds
prevMillis += 1000;
if (seconds>59) // If a minute has passed
{
seconds = 0; // Send seconds back to 0
minutes = minutes + 1; // Increment the minutes
if (minutes > 59) // If an hour has passed
{
hours = hours + 1; // Increment the hours
minutes = 0; // Send the minutes back to 0
if (hours > 23)
{
hours = 0; // // If a day has passed Set hours back to 0
}
}
}
}
display_time ();
delay(1000);
}