#include <bits/stdc++.h>
const int LMT = 100003;
long long sum[5][12][LMT << 2];
int Z;
long long query(int L, int R, int l, int r, int x) {
  if (L <= l && r <= R) return sum[Z - 2][(l - L + 1) % ((Z << 1) - 2)][x];
  int m = (l + r) >> 1;
  long long res = 0;
  if (L <= m) res += query(L, R, l, m, x << 1);
  if (R > m) res += query(L, R, m + 1, r, x << 1 | 1);
  return res;
}
void update(long long op, int pos, int l, int r, int x) {
  if (l == r) {
    int i, j;
    for (i = 2; i <= 6; ++i)
      for (j = 0; j < (i << 1) - 2; ++j)
        if (j > i)
          sum[i - 2][j][x] = op * ((i << 1) - j);
        else if (j > 0 && j <= i)
          sum[i - 2][j][x] = op * j;
        else
          sum[i - 2][j][x] = op << 1;
    return;
  }
  int m = (l + r) >> 1, i, j, le = m - l + 1;
  if (pos <= m)
    update(op, pos, l, m, x << 1);
  else
    update(op, pos, m + 1, r, x << 1 | 1);
  for (i = 2; i <= 6; ++i)
    for (j = 0; j < (i << 1) - 2; ++j)
      sum[i - 2][j][x] = sum[i - 2][j][x << 1] +
                         sum[i - 2][(j + le) % ((i << 1) - 2)][x << 1 | 1];
}
int main(void) {
  int l, r, i, n, t, v;
  long long x;
  scanf("%d", &n);
  for (i = 1; i <= n; ++i) {
    scanf("%I64d", &x);
    update(x, i, 1, n, 1);
  }
  scanf("%d", &t);
  while (t--) {
    scanf("%I64d", &x);
    if (1 == x) {
      scanf("%d%d", &l, &v);
      update(v, l, 1, n, 1);
    } else {
      scanf("%d%d%d", &l, &r, &Z);
      printf("%I64d\n", query(l, r, 1, n, 1));
    }
  }
  return 0;
}
