Another thing to look at is the difference between = and :=. For example, if you define your first function as
f[a_, t_, c_] := Sum[c[[i]] Exp[-(a - t[[i]])^2], {i, 1, 3}] then you get no warnings and you can evaluate
f[a, {t1, t2, t3}, {c1, c2, c3}] as you wish.