#include <bits/stdc++.h>
using namespace std;
long long a, b, c, d[100007], n, m, T[5][100007 << 2][12], R[100007 << 2], type,
    ans, sm;
void combine(long long z, long long v) {
  long long tr = R[v << 1] % (((z + 2) << 1) - 2);
  for (long long i = 0; i < ((z + 2) << 1) - 2; i++)
    T[z][v][i] =
        T[z][v << 1][i] +
        T[z][v << 1 | 1][(i - tr + (4 * z + 8 - 4)) % (((z + 2) << 1) - 2)];
}
void form_tree(long long l, long long r, long long v, long long z) {
  if (l == r) {
    R[v] = 1;
    T[z][v][0] = d[l];
    return;
  }
  form_tree(l, ((l + r) >> 1), v << 1, z);
  form_tree(((l + r) >> 1) + 1, r, v << 1 | 1, z);
  R[v] = R[v << 1] + R[v << 1 | 1];
  combine(z, v);
}
void upd(long long x, long long y, long long l, long long r, long long v,
         long long z) {
  if (l == r) {
    T[z][v][0] = y;
    return;
  }
  if (x <= ((l + r) >> 1))
    upd(x, y, l, ((l + r) >> 1), v << 1, z);
  else
    upd(x, y, ((l + r) >> 1) + 1, r, v << 1 | 1, z);
  combine(z, v);
}
long long bul(long long x, long long y, long long l, long long r, long long v,
              long long z, long long w) {
  if (y < l || r < x) return 0;
  if (x <= l && r <= y) {
    sm += r - l + 1;
    return T[z][v][(w - ((sm - (r - l + 1)) % (((z + 2) << 1) - 2)) +
                    (4 * z + 8 - 4)) %
                   (((z + 2) << 1) - 2)];
  }
  return (bul(x, y, l, ((l + r) >> 1), v << 1, z, w) +
          bul(x, y, ((l + r) >> 1) + 1, r, v << 1 | 1, z, w));
}
int main() {
  scanf("%lld", &n);
  for (long long i = 1; i <= n; i++) scanf("%lld", &d[i]);
  for (long long i = 0; i < 5; i++) form_tree(1, n, 1, i);
  scanf("%lld", &m);
  while (m--) {
    scanf("%lld%lld%lld", &type, &a, &b);
    if (type == 2) {
      scanf("%lld", &c);
      ans = 0;
      for (long long i = 1; i <= c; i++) {
        sm = 0;
        ans += (bul(a, b, 1, n, 1, c - 2, i - 1) * i);
      }
      long long cn = 1;
      for (int i = (c << 1) - 2; i > c; i--) {
        cn++;
        sm = 0;
        ans += (bul(a, b, 1, n, 1, c - 2, i - 1) * cn);
      }
      printf("%lld\n", ans);
    } else {
      for (long long i = 0; i < 5; i++) upd(a, b, 1, n, 1, i);
    }
  }
  return 0;
}
