var
a:array[1..100]of integer;
h:array[1..200,1..200]of longint;
f:array[1..200,1..200]of boolean;
max,i,s,n:longint;
function pro(l1,l2:integer):longint;
var
i:integer;
min,we:longint;
begin
if (l1>n)and(l2>n) then
begin
l1:=l1-n;
l2:=l2-n;
end;
if f[l1,l2]then
begin
pro:=h[l1,l2];
exit;
end;
if l2-l1=0 then
begin
f[l1,l2]:=true;
h[l1,l2]:=0;
pro:=0;
exit;
end;
if l2-l1=1 then
begin
f[l1,l2]:=true;
h[l1,l2]:=a[l1]*a[l2]*a[l2+1];
pro:=h[l1,l2];
exit;
end;
min:=0;
for i:= l1+1 to l2-1 do
begin
we:=pro(l1,i)+pro(i+1,l2)+a[l1]*a[l2+1]*a[i+1];
if we>min then
begin
min:=we;
end;
h[l1,l2]:=min;
f[l1,l2]:=true;
end;
pro:=h[l1,l2];
end;
begin
read(n);
fillchar(f,sizeof(f),false);
fillchar(h,sizeof(h),0);
for i:= 1to n do
begin
read(a[i]);
a[i+n]:=a[i];
end;
a[2*n+1]:=a[1];
max:=0;
for i:= 1to n do
begin
s:=pro(i,n+i-1);
{ writeln(s);}
if s>max then
max:=s;
end;
{max:=pro(1,n); }
write(max);
end.