#include <bits/stdc++.h>

#define REP(i, n) for(int i = 0; i < (int)(n); i++)
#define FOR(i, m, n) for(int i = m;i < n;i++)
#define SORT(v, n) sort(v, v+n)
#define pb(a) push_back(a)
#define eb(a) emplace_back(a)
#define vi vector<int>
#define ddvi vector<vector<int>>

using namespace std;
typedef long long ll;
typedef pair<int, int> P;

int color(char c){
	if(c == 'R') return 0;
	else if(c == 'G') return 1;
	else return 2;
}

vector<bool> flg(3,true);
int flg_check(){
	if(flg[0]) return 0;
	else if(flg[1]) return 1;
	else return 2;
}

int main(){
	#define int ll
	cin.tie(0);
	ios::sync_with_stdio(false);
	// ここに処理を記述

	int N;
	cin >> N;

	ddvi C(3,vi(0));
	string S;
	cin >> S;
	REP(i,N){
		if(S[i] == 'R'){
			C[0].eb(i);
		}
		else if(S[i] == 'G'){
			C[1].eb(i);
		}
		else{
			C[2].eb(i);
		}
	}

	if(C[0].size() == 0 || C[1].size() == 0 || C[2].size() == 0){
		cout << "0" << "\n";
	}

	// すべての文字が異なり('R', 'G', 'B'が揃う)
	// その配置が等間隔でない
	ll ans = 0;

	// くそ雑魚回答
	/*
	REP(i,N-1){
		flg[color(S[i])] = false;
		FOR(j,i+2,N){
			flg[color(S[j])] = false;
			if(S[i] == S[j]) continue;
			// 残った色の配列についてにぶたんで上界下界を探索
			auto left = upper_bound(C[flg_check()].begin(), C[flg_check()].end(), i);
			int left_pos = distance(C[flg_check()].begin(), left);
			auto right = upper_bound(C[flg_check()].begin(), C[flg_check()].end(), j);
			int right_pos = distance(C[flg_check()].begin(), right);
			if(right_pos == 0) continue;

			// cout << "[" << i << "," << j << "]" << "\n";
			// cout << left_pos << "," << right_pos << "\n";
			if((i+j)%2 == 0 && S[(i+j)/2] != S[i] && S[(i+j)/2] != S[j]){
				// cout << "ouch!\n";
				ans -= 1;
			}

			ans += right_pos - left_pos;
			flg[color(S[j])] = true;
		}
		flg[color(S[i])] = true;
	}
	*/

	REP(i,C[0].size()){
		REP(j,C[1].size()){
			int big = max(C[0][i],C[1][j]);
			int small = min(C[0][i],C[1][j]);
			ans += C[2].size();

			// B---small---bigの場合
			if(small - (big - small) >= 0){
				if( binary_search(C[2].begin(), C[2].end(), small - (big - small)) ){
					ans -= 1;
				}
			}
			// small---B---bigの場合
			if((small + big) % 2 == 0){
				int mid = (small + big) / 2;
				if( binary_search(C[2].begin(), C[2].end(), mid) ){
					ans -= 1;
				}
			}
			// small---big---Bの場合
			if(big + (big - small) < N){
				if( binary_search(C[2].begin(), C[2].end(), big + (big - small)) ){
					ans -= 1;
				}
			}
		}
	}

	cout << ans << "\n";

	return 0;
}