//#include <iostream>
//#include <string.h>
//#include <stdio.h>
//
//using namespace std;
//const int N = 50005;
//
//int stone[N];
//int n,t,ans;
//
//void combine(int k)
//{
// int tmp = stone[k] + stone[k-1];
// ans += tmp;
// 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] < tmp; j--)
// stone[j] = stone[j-1];
// stone[j] = tmp;
//
// while(j >= 2 && stone[j] >= stone[j-2])
// {
// int d = t - j;
// combine(j-1);
// j = t - d;
// }
//}
//
//int main()
//{
// while(scanf("%d",&n)!=EOF)
// {
// if(n == 0) break;
// for(int i=0; i<n; i++)
// scanf("%d",stone+i);
// 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);
// printf("%d\n",ans);
// }
// return 0;
//}
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int stone[50000 + 10];
int n, ans, tot;
void combine( int k)
{
int temp = stone[k - 1] + stone[k];
ans += temp;
for( int i = k; i < tot - 1; i++)
stone[i] = stone[i+1];
tot--;
int j = 0;
for( j = k - 1; j > 1 && stone[j - 1] <= temp; j-- )
stone[j] = stone[j-1];
stone[j] = temp;
while( j > 2 && stone[j-2] <= stone[j])
{
int d = tot - j;
combine(j - 1);
j = tot - d;
}
}
int main()
{
while(scanf("%d",&n) != EOF && n)
{
for( int i = 1; i <= n; i++)
scanf("%d",&stone[i]);
ans = 0;
tot = 1;
for( int i = 1; i <= n; i++)
{
stone[tot ++] = stone[i];
while(tot > 3 && stone[ tot - 3] <= stone[tot - 1])
combine(tot - 2);
}
while(tot > 2)
combine(tot - 1);
printf("%d\n",ans);
}
return 0;
}
//#include <string.h>
//#include <stdio.h>
//
//using namespace std;
//const int N = 50005;
//
//int stone[N];
//int n,t,ans;
//
//void combine(int k)
//{
// int tmp = stone[k] + stone[k-1];
// ans += tmp;
// 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] < tmp; j--)
// stone[j] = stone[j-1];
// stone[j] = tmp;
//
// while(j >= 2 && stone[j] >= stone[j-2])
// {
// int d = t - j;
// combine(j-1);
// j = t - d;
// }
//}
//
//int main()
//{
// while(scanf("%d",&n)!=EOF)
// {
// if(n == 0) break;
// for(int i=0; i<n; i++)
// scanf("%d",stone+i);
// 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);
// printf("%d\n",ans);
// }
// return 0;
//}
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int stone[50000 + 10];
int n, ans, tot;
void combine( int k)
{
int temp = stone[k - 1] + stone[k];
ans += temp;
for( int i = k; i < tot - 1; i++)
stone[i] = stone[i+1];
tot--;
int j = 0;
for( j = k - 1; j > 1 && stone[j - 1] <= temp; j-- )
stone[j] = stone[j-1];
stone[j] = temp;
while( j > 2 && stone[j-2] <= stone[j])
{
int d = tot - j;
combine(j - 1);
j = tot - d;
}
}
int main()
{
while(scanf("%d",&n) != EOF && n)
{
for( int i = 1; i <= n; i++)
scanf("%d",&stone[i]);
ans = 0;
tot = 1;
for( int i = 1; i <= n; i++)
{
stone[tot ++] = stone[i];
while(tot > 3 && stone[ tot - 3] <= stone[tot - 1])
combine(tot - 2);
}
while(tot > 2)
combine(tot - 1);
printf("%d\n",ans);
}
return 0;
}