#include <bits/stdc++.h>
long long size, n;
long long tre[7][17][262150];
void up(long long Z, long long N, long long x, long long v) {
  x += size - 1;
  long long d = v - tre[Z][N][x];
  while (x) tre[Z][N][x] += d, x /= 2;
}
long long read(long long Z, long long N, long long s, long long e) {
  s += size - 1;
  e += size - 1;
  long long r = 0;
  while (s <= e) {
    if (s % 2 == 1) r += tre[Z][N][s], s++;
    if (e % 2 == 0) r += tre[Z][N][e], e--;
    s /= 2, e /= 2;
  }
  return r;
}
void UP(long long P, long long K) {
  long long i, j, d;
  for (i = 2; i <= 6; i++) {
    int T = 2 * i - 2;
    for (j = 1; j <= T; j++) {
      d = (P + T - j + 1) % T;
      if (d == 0) d = 2;
      if (d > i) d = 2 * i - d;
      up(i, j, P, d * K);
    }
  }
}
int main() {
  scanf("%I64d", &n);
  long long i, k, j, p;
  for (size = 1; size < n; size *= 2)
    ;
  for (p = 1; p <= n; p++) {
    scanf("%I64d", &k);
    UP(p, k);
  }
  scanf("%I64d", &n);
  while (n--) {
    scanf("%I64d", &p);
    if (p == 1) {
      scanf("%I64d%I64d", &p, &k);
      UP(p, k);
    } else {
      long long s, e, z;
      long long D;
      scanf("%I64d%I64d%I64d", &s, &e, &z);
      D = 0;
      long long rst = 0;
      k = s % (z * 2 - 2);
      if (k == 0) k = z * 2 - 2;
      rst += read(z, k, s, e);
      printf("%I64d\n", rst);
    }
  }
}
