l:longint;
r:longint;
end;
var a:array[0..100] of data;
f:array[0..100,0..100] of longint;
n,max1,max,i,j,k,k1,l,i1,temp,j1,k2:longint;
procedure init;
var i:longint;
begin
readln(n);
read(a[0].l);
for i:=1 to n-1 do
if i<>n-1 then begin
read(a[i].l);
a[i-1].r:=a[i].l;
end
else begin
read(a[i-1].r);
a[i].l:=a[i-1].r;
a[i].r:=a[0].l
end;
end;
function maxs(a,b:longint):longint;
begin
maxs:=a;
if a<b then maxs:=b;
end;
begin
init;
max:=0;
for k:=0 to n-1 do begin
fillchar(f,sizeof(f),0);
for l:=2 to n do
for i1:=k to k+n-l do begin
i:=i1 mod n;
j1:=i1+l-1;
j:=j1 mod n;
max1:=0;
for k2:=i1 to j1-1 do begin
k1:=k2 mod n;
if l<n then
temp:=f[i,k1]+f[k1+1,j]+a[i].l*a[k1].r*a[j].r
else temp:=f[i,k1]+f[k1+1,j]+maxs(a[i].l*a[k1].r*a[k1+1].l,a[i].l*a[j].r*a[k1].r);
if temp>max1 then max1:=temp;
end;
f[i,j]:=max1;
end;
temp:=f[k,(k+n-1) mod n];
if temp>max then
max:=temp;
end;
writeln(max);
end.