#include <bits/stdc++.h>
using namespace std;
int n;
int save[100009];
long long memoIdaVueltaDer[100009], memoDer[100009], memoIdaVueltaIzq[100009],
    memoIzq[100009];
inline long long solIdayVueltaDer(int id) {
  if (id == n - 1) return memoIdaVueltaDer[id] = 0;
  if (memoIdaVueltaDer[id] != -1) return memoIdaVueltaDer[id];
  long long ans = 0;
  if (save[id] >= 2) ans = solIdayVueltaDer(id + 1) + (save[id] / 2) * 2;
  return memoIdaVueltaDer[id] = ans;
}
inline long long solDer(int id) {
  if (id == n - 1) return memoDer[id] = 0;
  if (memoDer[id] != -1) return memoDer[id];
  long long ans = 0;
  if (save[id] != 0) {
    ans = max(memoIdaVueltaDer[id],
              1 + ((save[id] - 1) / 2) * 2 + solDer(id + 1));
  }
  return memoDer[id] = ans;
}
inline long long solIdayVueltaIzq(int id) {
  if (id == 0) return memoIdaVueltaIzq[id] = 0;
  if (memoIdaVueltaIzq[id] != -1) return memoIdaVueltaIzq[id];
  int id1 = id - 1;
  long long ans = 0;
  if (save[id1] >= 2) ans = solIdayVueltaIzq(id - 1) + (save[id1] / 2) * 2;
  return memoIdaVueltaIzq[id] = ans;
}
inline long long solIzq(int id) {
  if (id == 0) return memoIzq[id] = 0;
  if (memoIzq[id] != -1) return memoIzq[id];
  int id1 = id - 1;
  long long ans = 0;
  if (save[id1] != 0) {
    ans = max(memoIdaVueltaIzq[id],
              1 + ((save[id1] - 1) / 2) * 2 + solIzq(id - 1));
  }
  return memoIzq[id] = ans;
}
int main() {
  int x;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d", &x);
    save[i] = x;
  }
  memset(memoIdaVueltaDer, -1, sizeof memoIdaVueltaDer);
  memset(memoDer, -1, sizeof memoDer);
  memset(memoIdaVueltaIzq, -1, sizeof memoIdaVueltaIzq);
  memset(memoIzq, -1, sizeof memoIzq);
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    ans = max(ans, solIdayVueltaIzq(i) + solDer(i));
    ans = max(ans, solIdayVueltaDer(i) + solIzq(i));
  }
  cout << ans << endl;
  return 0;
}
