#include <bits/stdc++.h>
int num[500000], am;
long long int ans;
int min(int i1, int i2) {
  if (i1 < i2) return i1;
  return i2;
}
int max(int i1, int i2) {
  if (i1 > i2) return i1;
  return i2;
}
void read() {
  scanf("%d", &num[am]);
  am++;
  while (am > 2 && (num[am - 2] <= num[am - 3] && num[am - 2] <= num[am - 1])) {
    ans += min(num[am - 3], num[am - 1]);
    num[am - 2] = num[am - 1];
    am--;
  }
}
void solve(int n) {
  int i, j, k, l;
  ans = 0;
  if (n <= 2) {
    if (n == 1) scanf("%d", &i);
    if (n == 2) scanf("%d%d", &i, &j);
    printf("0\n");
    return;
  }
  am = 2;
  scanf("%d%d", &num[0], &num[1]);
  for (i = 0; i < n - 2; i++) read();
  if (n <= 2) {
    printf("%I64d\n", ans);
    return;
  }
  if (num[0] <= num[1] && num[am - 2] <= num[am - 1]) {
    for (i = 0; i < am - 2; i++) ans += num[i];
    printf("%I64d\n", ans);
    return;
  }
  if (num[0] >= num[1] && num[am - 2] >= num[am - 1]) {
    for (i = 2; i < am; i++) ans += num[i];
    printf("%I64d\n", ans);
    return;
  }
  for (i = 0; i < am; i++) ans += num[i];
  l = 0;
  for (i = 0; i < am; i++)
    if (num[l] < num[i]) l = i;
  ans -= num[l];
  ans -= max(num[l - 1], num[l + 1]);
  printf("%I64d\n", ans);
}
int main() {
#pragma comment(linker, "/STACK:67108864")
  int n;
  while (scanf("%d", &n) != EOF) {
    solve(n);
  }
  return 0;
}
