1)Вы уверены что у вас элементов будет меньше чем int.MaxValue?
2)Выкиньте в топку этот List, можно оставить только если вам заранее известно количество элементов и вы можете инициализировать maxCapacity сразу. если нет то выкидывайте однозначно. Дело в том, что после 4-ой вставки (если мне не изменяет память) при каждой следующей вставке элемента Capacity увеличивается вдвое, соответственно массив элементов который там внутрях тоже увеличивается вдвое и элементы перегоняются в новый. представляете с какой скоростью растет массив? то есть на i = 33554433 + 1 list.Add() будет пытаться выделить кусок под 67108866 элементов, а это нужен непрерывный кусок памяти который к тому времени наверняка не находится и все падает с OutOfMemoryException. кстати же еще нужно хранит массив с которого будем копировать в тот который копируем. это огромная трата памяти. жесть просто.
Не знаю что у вас за код, который использует результат метода Time, но если там всего лишь перебор то этот ваш алгоритм это просто жесть, и наверняка можно вообще не использовать внутренний список, а выдавать посчитанное значение по мере необходимости через yield return и вычислять на лету.