#include <bits/stdc++.h>
using namespace std;
long long tree[12][12][(1 << 17)];
void add(int id1, int id2, int pos, long long val) {
  for (int i = pos; i < (1 << 17); i = ((i) | (i + 1)))
    tree[id1][id2][i] += val;
}
long long sum(int id1, int id2, int pos) {
  long long ans = 0;
  for (int i = pos; i > 0; i = ((i) & (i - 1))) ans += tree[id1][id2][i - 1];
  return ans;
}
int a[100010];
void update(int pos, int x) {
  int mod, i;
  int d = x - a[pos];
  a[pos] = x;
  for (mod = 2; mod <= 10; mod++) add(mod, pos % mod, pos, d);
}
long long query(int L, int R, int mod) {
  int i;
  long long ans = 0;
  for ((i) = 0; (i) < (int)(mod); (i)++) {
    int coef = 1 + min(i, mod - i);
    ans += coef * (sum(mod, (L + i) % mod, R) - sum(mod, (L + i) % mod, L));
  }
  return ans;
}
int main(void) {
  int N, Q, mod, i;
  scanf("%d", &N);
  for ((i) = 0; (i) < (int)(N); (i)++) scanf("%d", &a[i]);
  for (mod = 2; mod <= 10; mod += 2)
    for ((i) = 0; (i) < (int)(N); (i)++) add(mod, i % mod, i, a[i]);
  scanf("%d", &Q);
  for ((i) = 0; (i) < (int)(Q); (i)++) {
    int t, p, v, l, r, z;
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &p, &v);
      update(p - 1, v);
    } else {
      scanf("%d%d%d", &l, &r, &z);
      long long ans = query(l - 1, r, 2 * (z - 1));
      cout << ans << endl;
    }
  }
  return 0;
}
