Я не хочу давать ответ полностью, поэтому:
Начните с хвосто-рекурсивного определения sum
let rec _calc result L =
match L with
| [] -> result
| hd::tl -> _calc (result + hd) tl
let sum L = _calc 0 L
Что нужно изменить, чтобы умножить каждый элемент на 3?
(Также обратите внимание, что let calc L = L |> List.map (fun x -> (x*3)) |> List.sum
вернет 0 в пустом списке, а не вызовет исключение. Нет необходимости также форсировать исключение в вашей хвостовой рекурсивной версии, если только это не является обязательным.)