#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e16;
const long long N = 200005;
long long n;
long long a[N];
long long dp[N];
long long color[N];
long long solve(long long id) {
  if (id == 1 || color[id] == 3) {
    return dp[id] = INF;
  }
  if (dp[id] != -1) return dp[id];
  if (id <= 0 || id > n) return 0;
  long long xx = id + a[id];
  long long ret = a[id];
  if (xx > n || xx <= 0) {
    return dp[id] = ret;
  }
  ret += a[xx];
  xx = xx - a[xx];
  if (xx > n || xx <= 0) {
    return dp[id] = ret;
  }
  return dp[id] = ret + solve(xx);
}
void ddfs(long long s) {
  color[s] = 3;
  long long to = s + a[s];
  to = to - a[to];
  if (color[to] == 3) {
    return;
  } else {
    ddfs(to);
  }
}
void dfs(long long s) {
  color[s] = 1;
  long long to = s + a[s];
  if (to > n || to <= 0) {
    color[s] = 2;
    return;
  }
  to = to - a[to];
  if (to <= 0 || to > n) {
    color[s] = 2;
    return;
  }
  if (color[to] == 1) {
    ddfs(s);
    return;
  }
  if (color[to] == 2) {
    color[s] = 2;
    return;
  }
  if (color[to] == 0) {
    dfs(to);
  }
  color[s] = 2;
}
int main() {
  memset(dp, -1, sizeof dp);
  color[1] = 2;
  cin >> n;
  for (long long i = 2; i <= n; i++) {
    cin >> a[i];
  }
  long long ans = 0;
  for (long long i = 2; i <= n; i++) {
    if (color[i] == 0) {
      dfs(i);
    }
  }
  for (long long i = 1; i <= n - 1; i++) {
    ans = 0;
    ans += i;
    if (1 + i > n) {
      cout << ans << endl;
      continue;
    }
    if (1 + i - a[1 + i] <= 0) {
      cout << ans + a[1 + i] << endl;
      continue;
    }
    if (1 + i - a[1 + i] > 0 && 1 + i - a[1 + i] <= n) {
      ans += a[1 + i];
      if (solve(1 + i - a[1 + i]) >= INF) {
        cout << "-1\n";
        continue;
      }
      ans += solve(1 + i - a[1 + i]);
    }
    cout << ans << endl;
  }
  return 0;
}
