<?php
/**
 * Soma um vetor de horas
 * @param array[string] $tempos Vetor de horas no formato H:M:S
 * @return Total de horas no formato H:M:S
 */
function totalHoras(array $tempos) {
    $total_segundos = 0;
    foreach ($tempos as $tempo) {
        if (preg_match('/(\d{2}):(\d{2}):(\d{2})/', $tempo, $matches)) {
            $total_segundos += (int)$matches[1] * 3600 +
                               (int)$matches[2] * 60 +
                               (int)$matches[3];
        } else {
            throw new InvalidArgumentException('Tempo no formato errado: '.$tempo, 1);
        }
    }
    $horas          = floor($total_segundos / 3600);
    $total_segundos = $total_segundos % 3600;
    $minutos        = floor($total_segundos / 60);
    $segundos       = $total_segundos % 60;
    return sprintf('%02d:%02d:%02d', $horas, $minutos, $segundos);
}

$tempos = array('04:12:00', '08:44:00', '12:03:00', '01:09:00');

echo totalHoras($tempos);