#include <fstream>
using namespace std;
ifstream fin ("podm.in");
ofstream fout ("podm.out");
#define NMAX 508
#define LGMAX 208
#define int long long int
struct tip
{
int v[LGMAX],minim,lgv;
};
int n,i,j,x,cx,aux[LGMAX],lgaux,ov[LGMAX],lgov,nr,k,lg;
pair<int,int>a[NMAX];
tip dp[NMAX][NMAX];
int compar(int a[], int lga, int b[], int lgb);
void adun(int a[], int lga, int b[], int lgb, int rez[], int &lgrez);
signed main()
{
fin>>n;
for (i=0; i<=n; i++)
{
fin>>x;
if (i)
{
a[i].second=x;
a[i].first=cx;
}
cx=x;
}
for (lg=2; lg<=n; lg++)
{
for (i=1; i+lg-1<=n; i++)
{
dp[i][i+lg-1].lgv=LGMAX-1;
for (j=i+1; j<=i+lg-1; j++)
{
lgaux=1;
adun(dp[i][j-1].v,dp[i][j-1].lgv,dp[j][i+lg-1].v,dp[j][i+lg-1].lgv,aux,lgaux);
nr=a[i].first*a[j].first*a[i+lg-1].second;
lgov=0;
while (nr)
{
ov[lgov++]=nr%10;
nr/=10;
}
adun(aux,lgaux,ov,lgov,aux,lgaux);
if (compar(aux,lgaux,dp[i][i+lg-1].v,dp[i][i+lg-1].lgv)==0)
{
dp[i][i+lg-1].lgv=lgaux;
for (k=0; k<dp[i][i+lg-1].lgv; k++)
{
dp[i][i+lg-1].v[k]=aux[k];
}
}
}
}
}
for (i=dp[1][n].lgv-1; i>=0; i--)
{
fout<<dp[1][n].v[i];
}
return 0;
}
void adun(int a[], int lga, int b[], int lgb, int rez[], int &lgrez)
{
int i,t;
if (lga<=lgb)
{
lgrez=lgb;
for (i=lga; i<lgb; i++)
{
a[i]=0;
}
}
else
{
lgrez=lga;
for (i=lgb; i<lga; i++)
{
b[i]=0;
}
}
for (t=i=0; i<lgrez; i++)
{
int val=t+a[i]+b[i];
rez[i]=val%10;
t=val/10;
}
if (t)
{
rez[lgrez++]=t;
}
}
int compar(int a[], int lga, int b[], int lgb)/// 0 daca a e mai mic 1 daca a e mai mare
{
int i;
if (lga<lgb)
{
return 0;
}
if (lga>lgb)
{
return 1;
}
for (i=lga-1; i>=0; i--)
{
if (a[i]<b[i])
{
return 0;
}
if (a[i]>b[i])
{
return 1;
}
}
return 1;
}