var
n:longint;
a:array[0..120] of longint;
f:array[0..120,0..120] of int64;
procedure init;
begin
assign(input,'energy.in');
assign(output,'energy.out');
reset(input);
rewrite(output);
end;
procedure terminate;
begin
close(input);
close(output);
halt;
end;
procedure readdata;
var
i:longint;
begin
read(n);
for i:=0 to n-1 do
read(a[i]);
end;
procedure main;
var
i,j:longint;
max:int64;
begin
for i:=0 to n-1 do
f[i,1]:=0;
for j:=2 to n do
for i:=0 to n-1 do
begin
f[i,j]:=f[i,j-1]+a[i]*a[(i+j-1) mod n]*a[(i+j) mod n];
// writeln(f[i,j],' ',f[i,j-1],' ',a[i],' ',a[(i+j-1) mod n],' ',a[(i+j) mod n]);
if f[i,j]<f[(i+1) mod n,j-1]+a[i]*a[(i+1) mod n]*a[(i+j) mod n] then
f[i,j]:=f[(i+1) mod n,j-1]+a[i]*a[(i+1) mod n]*a[(i+j) mod n];
// writeln(f[i,j],' ',f[(i+1) mod n,j-1],' ',a[i],' ',a[(i+1) mod n],' ',a[(i+j) mod n]);
// writeln('**************');
end;
{for i:=0 to n-1 do
begin
for j:=1 to n do
write(f[i,j]:5);
writeln;
end;}
max:=0;
for i:=0 to n-1 do
if max<f[i,n] then
max:=f[i,n];
writeln(max);
end;
begin
init;
readdata;
main;
terminate;
end.