#include <bits/stdc++.h>
using namespace std;
long long a[200010], dp[200010 << 1];
int nxt[200010 << 1], n;
bool vis[200010 << 1];
int node(int flg, int idx) {
  if (idx <= 0 || idx > n) return 0;
  if (flg == 2)
    return idx << 1;
  else
    return idx << 1 | 1;
}
void input() {
  int i;
  scanf("%d", &n);
  for (i = 2; i <= n; i++) scanf("%I64d", &a[i]);
}
void inite() {
  int i;
  for (i = 2; i <= n; i++) {
    nxt[node(2, i)] = node(3, i + a[i]);
    nxt[node(3, i)] = node(2, i - a[i]);
  }
}
long long dfs(int idx) {
  int v;
  vis[idx] = 1;
  v = nxt[idx];
  if (dp[idx]) {
    vis[idx] = 0;
    return dp[idx];
  }
  if (vis[v]) {
    vis[idx] = 0;
    return dp[idx] = -1;
  }
  if (v) {
    long long res = dfs(v);
    vis[idx] = 0;
    if (res == -1)
      return dp[idx] = -1;
    else
      return dp[idx] = res + a[idx >> 1];
  } else {
    vis[idx] = 0;
    return dp[idx] = a[idx >> 1];
  }
}
void initdp() {
  int i;
  vis[2] = 1;
  for (i = 2; i <= n; i++) {
    dfs(node(2, i));
    dfs(node(3, i));
  }
}
void solv() {
  int i;
  for (i = 1; i < n; i++) {
    int v = node(3, i + 1);
    if (dp[v] == -1)
      printf("-1\n");
    else
      printf("%I64d\n", dp[v] + i);
  }
}
int main() {
  input();
  inite();
  initdp();
  solv();
  return 0;
}
