#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int min(int a[],int i,int b);
int cmp(const void *a,const void *b);
int search(int a[],int c,int b);
int find(int a,int b,int c);
int temp[33300];
int main(){
int n;
scanf("%d",&n);
int res=0;
int big[33300];
for(int i=0;i<n;i++){
scanf("%d",&big[i]);
if(i==0){
res+=big[i];
continue;
}
else if(i==1){
res+=abs(big[i]-big[0]);
}
else{
res+=min(big,i-1,big[i]);
}
}
printf("%d",res) ;
}
int find(int a,int b,int c){
int min;
min=a;
if(min>b)
min=b;
if(min>c)
min=c;
return min;
}
int min(int a[],int c,int b){
int res;
memcpy(temp,a,(c+1)*sizeof(int));
qsort(temp,c+1,sizeof(temp[0]),cmp);
int d;
if(b<=0){
return abs(temp[0]-b);
}
else{
if(temp[c]<=b)
return abs(temp[c]-b);
d=search(temp,c,b);
if(d==0){
return abs(temp[0]-b)<=abs(temp[1]-b)?abs(temp[0]-b):abs(temp[1]-b);
}
else if(d==c){
return abs(temp[c]-b)<=abs(temp[c-1]-b)?abs(temp[c]-b):abs(temp[c-1]-b);
}
else{
return find(abs(temp[d]-b),abs(temp[d-1]-b),abs(temp[d+1]-b));
}
}
}
int search(int a[],int c,int x){
int low=0,high=c,mid;
mid=c/2;
if(a[mid]==x)
return mid;
int flag=mid;
int kk=0;
while(a[mid]!=x){
if(a[mid]<x){
low=mid;
mid=(low+high)/2;
}
else if(a[mid]>x){
high=mid;
mid=(low+high)/2;
}
else{
return mid;
}
if(flag!=mid)
flag=mid;
else{
kk++;
if(kk==2)
return mid;
}
}
}
int cmp(const void *a,const void *b){
int *p1=(int *)a;
int *p2=(int *)b;
return *p1-*p2;
}