#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
struct fenvik {
  long long t[MAXN];
  int n;
  fenvik(int n = 0) : n(n) { memset(t, 0, sizeof(t)); }
  long long sum(int l, int r) {
    long long res = 0;
    l--;
    for (; r >= 0; r = (r & (r + 1)) - 1) res += t[r];
    for (; l >= 0; l = (l & (l + 1)) - 1) res -= t[l];
    return res;
  }
  void update(int i, int det) {
    for (; i < n; i |= (i + 1)) t[i] += det;
  }
};
const int Z = 10;
fenvik f[Z][2 * Z];
int a[MAXN];
int n, m;
int main() {
  cin >> n;
  for (int z = 2; z <= 6; z++)
    for (int i = 0; i < 2 * (z - 1); i++) f[z][i].n = n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    for (int z = 2; z <= 6; z++) f[z][i % (2 * (z - 1))].update(i, a[i]);
  }
  cin >> m;
  int type;
  for (int i = 0; i < m; i++) {
    cin >> type;
    switch (type) {
      case 1:
        int p, v;
        cin >> p >> v;
        p--;
        for (int z = 2; z <= 6; z++)
          f[z][p % (2 * (z - 1))].update(p, v - a[p]);
        a[p] = v;
        break;
      case 2:
        int l, r, z;
        cin >> l >> r >> z;
        l--;
        r--;
        long long ans = 0;
        int coef = 1, det = 1;
        for (int k = l % (2 * (z - 1));;) {
          ans += coef * f[z][k].sum(l, r);
          coef += det;
          if (coef == z) det = -det;
          k++;
          k %= 2 * (z - 1);
          if (k == l % (2 * (z - 1))) break;
        }
        cout << ans << endl;
        break;
    }
  }
}
