const
maxn=100;
var
n:longint;
a:array[1..2*maxn+1] of longint;
opt:array[1..2*maxn,1..2*maxn] of longint;
procedure setup;
begin
assign(input,'energy.in');
assign(output,'energy.out');
reset(input);
rewrite(output);
end;
procedure closeit;
begin
close(input);
close(output);
end;
procedure init;
var
i:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do a[i+n]:=a[i];
a[n*2+1]:=a[1];
end;
procedure Dp;
var
i,j,len,max,k:longint;
begin
for len:=2 to n do
for i:=1 to 2*n+1-len do
begin
j:=i+len-1;
max:=-maxlongint;
for k:=i to j-1 do
if max<opt[i,k]+opt[k+1,j]+a[i]*a[k+1]*a[j+1] then
max:=opt[i,k]+opt[k+1,j]+a[i]*a[k+1]*a[j+1];
opt[i,j]:=max;
end;
end;
procedure print;
var
ans,i:longint;
begin
ans:=-maxlongint;
for i:=1 to n+1 do
if opt[i,i+n-1]>ans then ans:=opt[i,i+n-1];
writeln(ans);
end;
begin
setup;
init;
Dp;
print;
closeit;
end.