var
n,i,j,k,l,m,x:longint;
a:array[1..201]of longint;
dg:array[1..201,1..201]of longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
a[i+n]:=a[i];
end;
a[2*n+1]:=a[1];
for i:=1 to (n*2+1) do
begin
for j:=1 to (n*2+1) do
dg[i,j]:=0;
end;
for i:=1 to (n-1) do
for j:=1 to n do
begin
for k:= j to (j+i-1) do
begin
x:=(dg[j,k]+dg[k+1,j+i]+(a[j]*a[k+1]*a[j+i+1]));
if x>dg[j,j+i] then
dg[j,j+i]:=x;
end;
end;
x:=dg[1,n];
for i:=2 to n do
begin
if x<dg[i,i+n-1] then
x:=dg[i,i+n-1];
end;
write(x);
end.
#include<iostream>
#include<cstring>
using namespace std;
int n,e[201],f[201][201],ans=0;
int main()
{
cin >> n;
for (int i=1;i<=n;i++)
{
cin >> e[i];
e[i+n]=e[i];
}
memset(f,0,sizeof(f));
for (int i=2; i<2*n;i++)
for (int j=i-1;j>=1 && i-j<n;j--)
{
for (int k=j;k<i;k++)
{
int tem = f[j][k] + f[k+1][i] + e[j]*e[k+1]*e[i+1];
if (tem>f[j][i]) f[j][i] = tem;
}
if (f[j][i]>ans) ans=f[j][i];
}
cout << ans << endl;
return 0;
}