#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static const int L = 233333;
  static char sxd[L], *sss = sxd, *ttt = sxd;
  if (sss == ttt) {
    ttt = (sss = sxd) + fread(sxd, 1, L, stdin);
    if (sss == ttt) {
      return EOF;
    }
  }
  return *sss++;
}
inline char readalpha() {
  char c = gc();
  for (; !isalpha(c); c = gc())
    ;
  return c;
}
inline char readchar() {
  char c = gc();
  for (; c == ' '; c = gc())
    ;
  return c;
}
template <class T>
inline bool read(T& x) {
  bool flg = false;
  char c = gc();
  x = 0;
  for (; !isdigit(c); c = gc()) {
    if (c == '-') {
      flg = true;
    } else if (c == EOF) {
      return false;
    }
  }
  for (; isdigit(c); c = gc()) {
    x = (x << 1) + (x << 3) + (c ^ 48);
  }
  if (flg) {
    x = -x;
  }
  return true;
}
template <class T>
inline void write(T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10) {
    putchar(x | 48);
    return;
  }
  write(x / 10);
  putchar((x % 10) | 48);
}
map<long long, long long> mp;
int cnt;
int main() {
  int n;
  long long a;
  read(n);
  read(a);
  mp[a - 1] = 0;
  for (int i = 2; i <= n; ++i) {
    read(a);
    while (!mp.empty()) {
      auto it = --mp.end();
      long long aa = it->first, bb = it->second;
      if (aa < a) {
        break;
      }
      mp[aa % a] = max(mp[aa % a], bb + (aa - aa % a) * (i - 1));
      mp[a - 1] = max(mp[a - 1], bb + (aa - aa % a - a) * (i - 1));
      mp.erase(it);
    }
  }
  long long ans = 0;
  for (auto it : mp) {
    ans = max(n * it.first + it.second, ans);
  }
  write(ans);
  return 0;
}
