#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int n;
int a[N];//a存储珠子的头标记
//dp[l][r]:合并lr得到的最大值
int dp[N][N];
int main() {
cin>>n;
for(int i = 1;i <= n;i++){
cin>>a[i];
a[i+n] = a[i];//将区间复制
}
//状态计算
//阶段:穷举区间长度
for(int len = 3;len <= n + 1;len++){
//状态:穷举区间的起点
for(int l = 1;l + len - 1 <= 2 * n;l++){
//区间终点
int r = l + len - 1;
//决策:穷举分割点
for(int k = l+1;k < r;k++){
dp[l][r] = max(dp[l][r],dp[l][k]+dp[k][r]+a[l]*a[k]*a[r]);
}
}
}
//求结果
int r = 0;
for(int i = 1;i <= n;i++){
r = max(r,dp[i][i+n]);//dp[1,n+1] dp[2,n+2]... dp[n,2*n]
}
cout<<r;
return 0;
}
/**************************************************************
Problem: 2059
User: admin
Language: C++
Result: Accepted
Time:60 ms
Memory:2248 kb
****************************************************************/