#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m;
int x[100000];
long long f[5][10][100001];
int add(int t, int s, int x, int y) {
  x++;
  while (x <= n) {
    f[t][s][x] += y;
    x |= x + 1;
  }
  return 0;
}
long long get(int t, int s, int x) {
  x++;
  long long y = 0;
  while (x > 0) {
    y += f[t][s][x];
    x = (x & (x + 1)) - 1;
  }
  return y;
}
long long get(int t, int s, int a, int b) {
  return get(t, s, b) - get(t, s, a - 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x[i]);
    for (int j = 2; j <= 6; j++) add(j - 2, i % (2 * (j - 1)), i, x[i]);
  }
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    int t, a, b, c;
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &a, &b);
      a--;
      for (int j = 2; j <= 6; j++) add(j - 2, a % (2 * (j - 1)), a, b - x[a]);
      x[a] = b;
    } else {
      scanf("%d%d%d", &a, &b, &c);
      a--;
      b--;
      long long ans = 0;
      for (int j = 0; j < 2 * (c - 1); j++) {
        int p = (a + j) % (2 * (c - 1));
        int k = j + 1;
        if (k > c) k = 2 * c - k;
        ans += k * get(c - 2, p, a, b);
      }
      printf("%I64d\n", ans);
    }
  }
  return 0;
}
