#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 17;
int a[100005];
long long bit[12][12][maxn];
int n, q;
void add(int x, int y, int i, long long val) {
  while (i < maxn) {
    bit[x][y][i] += val;
    i = ((i) | (i + 1));
  }
}
long long sum(int x, int y, int i) {
  long long ans = 0;
  while (i > 0) {
    ans += bit[x][y][i - 1];
    i = ((i) & (i - 1));
  }
  return ans;
}
void upd(int pos, int x) {
  int delta = x - a[pos];
  a[pos] = x;
  for (int i = 2; i <= 10; i++) add(i, pos % i, pos, delta);
}
long long qry(int l, int r, int md) {
  long long ans = 0;
  for (int i = 0; i < md; i++)
    ans += (1 + min(i, md - i)) *
           (sum(md, (l + i) % md, r) - sum(md, (l + i) % md, l));
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 2; i <= 10; i += 2)
    for (int j = 0; j < n; j++) add(i, j % i, j, a[j]);
  scanf("%d", &q);
  while (q--) {
    int t, p, x, l, r, z;
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &p, &x);
      upd(p - 1, x);
    } else {
      scanf("%d%d%d", &l, &r, &z);
      long long ans = qry(l - 1, r, 2 * (z - 1));
      cout << ans << endl;
    }
  }
  return 0;
}
