#include <set>
#include <bitset>
#include <list>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#include <ios>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <utility>
#include <complex>
#include <numeric>
#include <functional>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>
#define lson rt << 1, l, m
#define rson rt << 1 | 1, m + 1, r
using namespace std;
const int INF = 0x7FFFFFFF;
const double EPS = 1e-10;
const double PI = 2 * acos (0.0);
const int MOD = 7;
const int maxn = 500000 + 66;
int stone[maxn];
int n, t, ans;
void Combine (int k)
{
int temp = stone[k] + stone[k-1];
ans += temp;
for (int i = k; i < t - 1; i++)
stone[i] = stone[i+1];
t--;
int j = 0;
for(j = k - 1; j > 0 && stone[j-1] < temp; j--)
stone[j] = stone[j-1];
stone[j] = temp;
while (j >= 2 && stone[j] >= stone[j-2])
{
int d = t - j;
Combine (j - 1);
j = t - d;
}
}
void Solve ()
{
t = 1, ans = 0;
for (int i = 1; i < n; i++)
{
stone[t++] = stone[i];
while (t >= 3 && stone[t-3] <= stone[t-1])
Combine (t - 2);
}
while (t > 1) Combine (t - 1);
}
int main()
{
// freopen ("aaa.txt", "r", stdin);
scanf ("%d", &n);
for (int i = 0; i < n; i++)
scanf ("%d", &stone[i]);
Solve ();
printf ("%d\n", ans);
return 0;
}