#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18 + 7;
int p[400010], a[200010];
long long d[400010];
vector<int> g[400010];
int n;
void dfs(int x, long long cnt) {
  d[x] = cnt;
  for (int i = 0; i < g[x].size(); i++) {
    long long cnt2 = min(INF, cnt + a[g[x][i] % n]);
    dfs(g[x][i], cnt2);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d", a + i);
    if (i + a[i] < n)
      p[i] = n + i + a[i];
    else
      p[i] = -1;
    if (i - a[i] >= 0)
      p[n + i] = i - a[i];
    else
      p[n + i] = -1;
  }
  for (int i = 1; i < n; i++) {
    if (p[i] != -1) g[p[i]].push_back(i);
    if (p[n + i] != -1) g[p[n + i]].push_back(n + i);
  }
  for (int i = 0; i < n * 2; i++) {
    d[i] = INF;
  }
  dfs(0, INF);
  for (int i = 0; i < n; i++) {
    if (p[i] == -1) dfs(i, a[i]);
  }
  for (int i = 0; i < n; i++) {
    if (p[n + i] == -1) dfs(n + i, a[i]);
  }
  for (int i = 1; i < n; i++) {
    if (d[n + i] == INF) {
      cout << -1 << endl;
    } else {
      cout << d[n + i] + i << endl;
    }
  }
  return 0;
}
