#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
****************************************************************/