#include <bits/stdc++.h>
using namespace std; 
  
#define     ff              first
#define     ss              second
#define     pb(x)           push_back(x)
#define     mp              make_pair
#define     sz(x)           x.size()
#define     mem(x ,y)       memset(x , y , sizeof x )
#define     all(a )         a.begin() , a.end()
#define     endl            "\n"
#define     pii             pair<int,int> 
#define     rep(i ,n )      for(int i = 0 ; i < n ; i++ )
#define     repi(i ,n )     for(int i = 1 ; i <= n ; i++ )
#define     forn(i ,x,n )   for(int i = x ; i <= n ; i++ )
#define     ford(i ,x,n )   for(int i = x ; i >= n ; i-- )
#define     repit(i, c)     for( __typeof((c).begin()) i = (c).begin(); i != (c).end();++i )
#define     dbg(args...)    do {   cerr << #args << ' ' ;  print(args); } while(0); cerr<< endl ;
  
typedef long long ll  ;
typedef unsigned long long  ull ;
typedef vector<int> vi  ;
 
const int  inf = 0x3f3f3f3f  ;
const int  mod = 10007;
const ll  INF = 1e18+1234   ;

int setbit(int n, int pos  ) { return n = n|(1<< pos) ; }
int resetbit(int n,int pos ) {  return n =  n & ~(1<<pos ); }
bool checkbit(int  n,int pos ) { return (bool ) (n&(1<<pos))  ; }
 
template < typename T > T mul(T x, T y   ) { x %= mod ; y %= mod ; return (x*y)%mod  ;  }
template < typename T > T add (T x, T y  ) { x %= mod ; y %= mod ; return (x+y)%mod ;  }
template < typename T > T modPow(T x, T k ,T mod ) { if(k == 0 ) return 1; if(k&1  ) { return ( (x%mod)*modPow(x,k-1, mod )%mod )%mod ; } else { T ret = modPow(x,k/2 , mod ) ; ret %= mod ; return (ret*ret )%mod; } }
template < typename T > T ext_gcd(T num1 , T num2, T &X , T &Y ) { T r2,r1, q2, q1 , x2, x1, y2 ,y1 , x,  y, r   ; x2 = 1; y2 = 0;  x1 = 0; y1 = 1; for( r2 =num1 ,r1 = num2 ;r1 != 0 ; y2 = y1, y1 = y,x2 = x1 ,x1 = x ,r2 = r1, r1 = r) {q1 = r2/r1; x = x2 - q1*x1; y = y2 - q1*y1; r = r2%r1 ; } X = x2 ; Y = y2 ; return r2 ;  }
template < typename T > void print(const T& v) {    cerr << v << ' ' ;}
template < typename T1, typename... T2 > void print( const T1& first, const T2&... rest ){ print(first); print(rest...) ;}
template<class T> string to_str(T t){stringstream ss; ss<<t; return ss.str();} 
template < typename T > 
T  modInv( T x , T m) {  
    return modPow(x,m-2 , m) ;   
    // long long ret, t ;// 
    // ext_gcd( x, m ,ret ,t  ) ;
    // ret %= m ; if(ret<0) ret += m  ; 
    // return ret;
} 
 
// debuging ...
template<typename T > 
void dbg_a(T a[] ,int n=10 ) {
    cerr << "[ "; rep(i,n )cerr<<a[i]<<' ' ; cerr<< " ]" <<  endl; 
}
 
template < typename F,  typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
    return os << "[ " << p.first << ", " << p.second << " ]";
}
 
template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
    os << "[ "; rep(i , sz( v)  )  os << v[i] << ' ' ; return os << " ]\n" ; 
} 


//int dx[] = {0 , 0 ,+1, -1 } ;
//int dy[] = {-1, +1,0 , 0 };
 
const int M = (int )1e6 +123;  
const int maxn  = (int)1e6 ;
 
////  code from here ...    

int a[M +2]  , b[100] , c[100 ]  ; 

void solve() { 
     //cerr<< "program running ... " <<  endl ; 
    int x = 16, k , n, ans = 0  ;
    cin >> n;
    repi(i ,n-1)  { 
        cin >> a[i ] ;   
    } 
    b[n] = b[n -1]  = a[n-1] ; 
    ford(i ,n -2  , 1  ) {

        b[i+1] = min(a[i] , b[i+1]  ) ; 
        b[i] = a[i ]; 
    }  
    repi(i, n  ) ans += b[i] ; 
    // dbg_a(a) ; 
    // dbg_a(b) ;
    cout << ans << endl ; 

}


 
int  main() {
 
     ios ::sync_with_stdio(false);  cin.tie(0); cout.tie(0) ;  
   
    ll t=1 , c =0 ;
    
     //cin >>t ; 
   // scanf("%d",&t) ; 
    while(t--) { 
    //   printf("Case %d: ", ++c) ;
        solve()  ;
     
    }   
    return 0 ;
       
} 
// g++ f.cpp -o f.exe

// read the question carefully  (ll vs int )  
// check constraints carefully ...  is 1e5+1e5 = 1e10 ?? 




















Measured memory_bytes: 256