#include <bits/stdc++.h>
using namespace std;
void show() { cout << '\n'; }
template <typename T, typename... Args>
void show(T a, Args... args) {
  cout << a << " ";
  show(args...);
}
template <typename T>
void show_c(T &a) {
  for (auto &x : a) {
    cout << x << " ";
  }
  cout << endl;
}
int arr[200100];
int n;
long long d[200100][2];
vector<pair<int, int> > out[200100][2];
void add_edge(int x, int dx, int y, int dy) {
  out[x][dx].push_back(make_pair(y, dy));
}
void dfs(int x, int dim, long long val) {
  val += arr[x];
  d[x][dim] = val;
  for (auto &v : out[x][dim]) {
    dfs(v.first, v.second, val);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; ++i) {
    scanf("%d", &arr[i]);
  }
  for (int i = 2; i <= n; ++i) {
    if (i + arr[i] > n) {
      add_edge(0, 0, i, 0);
    } else {
      add_edge(i + arr[i], 1, i, 0);
    }
    if (i - arr[i] <= 0) {
      add_edge(0, 0, i, 1);
    } else {
      add_edge(i - arr[i], 0, i, 1);
    }
  }
  for (int i = 1; i <= n; ++i) {
    d[i][0] = d[i][1] = -1;
  }
  dfs(0, 0, 0);
  for (int i = 1; i < n; ++i) {
    if (d[1 + i][1] == -1) {
      printf("-1\n");
    } else {
      printf("%I64d\n", i + d[1 + i][1]);
    }
  }
  return 0;
}
