区间dp
#include <iostream>
#include <cstdio>
using namespace std;
int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
const int N=300;
int n,f[N][N],a[N],ans;
int main()
{
n=read();
for(int i=1;i<=n;i++) a[i]=a[n+i]=read();
for(int i=1;i<=n*2-2;i++) f[i][i+2]=a[i]*a[i+1]*a[i+2];
for(int k=3;k<=n;k++)
for(int i=1;i<=n*2-k;i++)
for(int j=1;j<k;j++)
f[i][i+k]=max(f[i][i+k],f[i][i+j]+f[i+j][i+k]+a[i]*a[i+j]*a[i+k]);
for(int i=1;i<=n;i++) ans=max(ans,f[i][i+n]);
cout<<ans;
return 0;
}