#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200100;
int n;
int a[MAXN];
int g[2 * MAXN];
int deg[2 * MAXN];
int was[2 * MAXN];
long long sum[2 * MAXN];
void addEdge(int a, int b) {
  ++deg[b];
  g[a] = b;
}
inline bool dfs(int v) {
  was[v] = 1;
  if (v == 1) return true;
  if (g[v] != -1) {
    if (was[g[v]] == 1) {
      return true;
    }
    if (!was[g[v]] && dfs(g[v])) {
      return true;
    }
    sum[v] = sum[g[v]];
  }
  sum[v] += a[(v - 1) % n + 1];
  was[v] = 2;
  return false;
}
void bfs(int v) {
  queue<int> q;
  sum[v] = -1;
  while (!q.empty()) {
    v = q.front();
    q.pop();
    if (g[v] != -1 && sum[g[v]] != -1) {
      sum[g[v]] = -1;
      q.push(g[v]);
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; ++i) {
    scanf("%d", a + i);
  }
  memset(g, 0xff, sizeof g);
  for (int i = 2; i <= n; ++i) {
    if (i + a[i] <= n) {
      addEdge(i, n + i + a[i]);
    }
    if (i - a[i] > 0) {
      addEdge(n + i, i - a[i]);
    }
  }
  for (int i = 2; i <= n; ++i) {
    if (deg[i] == 0) {
      if (dfs(i)) {
        bfs(i);
      }
    }
    if (deg[i + n] == 0) {
      if (dfs(i + n)) {
        bfs(i + n);
      }
    }
  }
  for (int i = 2; i <= n; ++i) {
    if (sum[i] == 0) sum[i] = -1;
    if (sum[i + n] == 0) sum[i + n] = -1;
  }
  for (int i = 1; i < n; ++i) {
    if (sum[1 + i + n] == -1) {
      puts("-1");
    } else {
      printf("%lld\n", i + sum[1 + i + n]);
    }
  }
  return 0;
}
