/*
#include <stdio.h>
int a[50001], b[50001];
int bs(int s, int e, int k)
{
int mid=(s+e)/2;
if(s>e)
return -1;
if(a[mid]==k)
{
return mid;0
}
else if(a[mid] < k)
{
bs(mid+1,e,k);
}
else if(a[mid] > k)
{
bs(s,mid-1,k);
}
}
void qs(int s, int e) // a[s] 부터 a[e]까지 정렬하세요
{
int pivot=s;
int low=s, high=e+1;
int temp;
if(s>=e)
{
return ;
}
do
{
do
{
low++;
}
while(a[low]<a[pivot]);
do
{
high--;
}
while(a[high]>a[pivot]);
if(low<high)
{
temp=a[high];
a[high]=a[low];
a[low]=temp;
}
}
while(low<high);
temp=a[high];
a[high]=a[pivot];
a[pivot]=temp;
qs(s,high-1);
qs(high+1,e);
}
int main()
{
int i, n, j, temp;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
scanf("%d", &a[i]);
b[i]=a[i];
}
// 버블정렬 -> 퀵정렬
qs(1,n);
//순차탐색 -> 이분탐색
// a배열에서 b[i]의 위치 출력
for(i=1; i<=n; i++)
{
printf("%d ",bs(1,n,b[i])-1);
}
}
*/
/*
#include <stdio.h>
int a[100001],n;
int bs(int s, int e, int k)
{
int mid=(s+e)/2;
if(s>=e)
{
if(a[mid]>=k) return mid;
else return n+1;
}
if(a[mid] < k)
{
bs(mid+1,e,k);
}
else if(a[mid] >= k)
{
bs(s,mid,k);
}
}
int main()
{
int k, i;
scanf("%d", &n);
scanf("%d", &k);
for(i=1; i<=n; i++)
{
scanf("%d", &a[i]);
}
printf("%d", bs(1, n, k));
}
*/
/*
7 9
1 3 5 6 7 7 7
1 2 3 4 5 6 7
*/
#include <stdio.h>
int a[100001];
int n;
int f()
{
int i;
int x=a[1]+a[2]+a[n];
for(i=2; i<=n;)
{
if(i==n-1||i==n-2)
{
return x;
}
if(a[i+1]<a[i+2])
{
x=x+a[i+2];
i=i+2;
}
else if(a[i+1]>a[i+2])
{
x=x+a[i+1];
i=i+1;
}
else if(a[i+1]==a[i+2])
{
x=x+a[i+2];
i=i+2;
}
}
}
int main()
{
int i;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
scanf("%d", &a[i]);
}
printf("%d", f());
}