#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
const double PI = 2.0 * acos(0.0);
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
int n, a[200111];
long long f[200111][2];
bool g[200111][2];
bool inStack[200111][2];
long long call(long long x, long long step) {
  if (f[x][step] != -1) return f[x][step];
  inStack[x][step] = true;
  if (x == 1) {
    f[x][step] = 0;
    g[x][step] = false;
  } else {
    if (step == 0) {
      long long tmp = x + a[x];
      if (tmp <= n) {
        if (inStack[tmp][1]) {
          f[x][step] = 0;
          g[x][step] = false;
        } else {
          f[x][step] = a[x] + call(tmp, 1);
          g[x][step] = g[tmp][1];
        }
      } else {
        f[x][step] = a[x];
        g[x][step] = true;
      }
    } else {
      long long tmp = x - a[x];
      if (tmp > 0) {
        if (inStack[tmp][0]) {
          f[x][step] = 0;
          g[x][step] = false;
        } else {
          f[x][step] = a[x] + call(tmp, 0);
          g[x][step] = g[tmp][0];
        }
      } else {
        f[x][step] = a[x];
        g[x][step] = true;
      }
    }
  }
  inStack[x][step] = false;
  return f[x][step];
}
int main() {
  cin >> n;
  for (int i = (2), _b = (n); i <= _b; i++) scanf("%d", &a[i]);
  memset(f, -1, sizeof(f));
  memset(g, false, sizeof(g));
  memset(inStack, false, sizeof(inStack));
  for (int x = (2), _b = (n); x <= _b; x++) {
    call(x, 0);
    call(x, 1);
  }
  for (int i = (1), _b = (n - 1); i <= _b; i++) {
    long long tmp = 1 + i;
    if (g[tmp][1]) {
      printf("%I64d\n", f[tmp][1] + i);
    } else
      printf("%d\n", -1);
  }
}
