Some programming principles help us make short work of this. The key principle is to encapsulate what's going on.
First, the surface. It depends on some parameters, so let's be explicit about that, rather than letting those parameters run around loose as "global" variables. To illustrate, I begin by generating some (reproducible) random values for these parameters:
n = 6;
SeedRandom[17];
λ = RandomReal[GammaDistribution[4, 1/5], n];
ϵ = RandomReal[GammaDistribution[3, 1/4], n];
x0 = RandomVariate[BinormalDistribution[{2.5, 2}, {2, 1}, 1/2], n];
I am going to change the meaning of the $\epsilon$ a little, though: it is more natural that they be proportional to the widths of the "hills," so they will appear in the denominator below. Here is the "Gaussian radial" function:
f[x_, {λ_, ϵ_, x0_}] := Sum[λ[[i]] Exp[-(Norm[x - x0[[i]]]/ϵ[[i]])^2], {i, 1, Length[λ]}];
Its first argument is an $(x,y)$ coordinate pair and its second is a list of the parameters. It computes the topographic elevation at $(x,y)$ by summing the values of the Gaussians at $(x,y)$. We can make a pretty pseudo-3D plot of the topography (and store it in a variable for later display):
dem = Plot3D[
f[{x, y}, {λ, ϵ, x0}], {x, -1, 5}, {y, -1, 5}, PlotRange -> {Full, Full, Full},
PlotStyle -> Opacity[0.9], MeshFunctions -> {#3 &}, MeshStyle -> GrayLevel[0.7]]
Second, the key Calculus idea is that the hikers' path is parameterized by their base curve $t\to \gamma(t) = (x(t), y(t))$; it merely needs to be "lifted" to the proper height given by $f(\gamma(t), \ldots)$. (The dots represent values of the parameters controlling the shape of $f$.) The fully parameterized hike therefore is
$$t \to (x(t), y(t), f((x(t), y(t)), \ldots)).$$
Because we have encapsulated the key functionality, this is easy and straightforward to code:
γ[t_] := {5/2, 2} + {9 Sin[4 t], -6 Cos[4 t]}/5;
path[t_, {λ_, ϵ_, x0_}] := With[{x = γ[t]}, Append[x, f[x, {λ, ϵ, x0}]]];
(For a general-purpose solution you might want to make γ
and f
arguments of path
, too, in keeping with the idea that everything a function like path
depends on should be explicitly exhibited, within reason.)
ParametricPlot3D
takes care of the graphical display:
hike = ParametricPlot3D[path[t, {λ, ϵ, x0}], {t, 0, π/2}, PlotStyle -> Directive[Thick, Red]];
Finally, use Show
to assemble the plots of the surface and the path and control the final appearance:
Show[dem, hike, Boxed -> False, BoxRatios -> Automatic, AxesLabel -> {x, y, z}]

Edit
If you wish to study the hike in more detail, you may introduce a second parameter to path
to fill it in vertically: let it multiply the $z$ value and range from $0$ to $1$. I will leave the implementation as an exercise and just show the result:

This also shows how the technique is capable of accurately drawing a hike which is not a closed loop.