#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
typedef long long ll;
using namespace std;


int main() 
{
	// what is greedy?
	int T;
	cin >> T;
	while (T--) {
		int len, a, b;
		cin >> len >> a >> b;
		string s;
		cin >> s;
		if (b > 0) 
			cout << (a + b) * len << endl;
		else {
			// 尽量连续
			char ch = s[0];
			int arr[5] = { 0, 0, 0, 0, 0 };
			for (int i = 0; i < len; i++) {
				if (s[i] != ch) {
					arr[ch - '0']++;
					ch = s[i];
				}
			}
			// cout << s[len - 1] - '0' << endl;
			arr[s[len - 1] - '0']++;
			// cout << "arr[0] == " << arr[0] << endl;
			// cout << "arr[1] == " << arr[1] << endl;
			int minEle = arr[0] < arr[1] ? arr[0] : arr[1];
			cout << a * len + (minEle + 1) * b << endl;
		}
		// if (a <= 0 && b <= 0) {
		// 	// 尽量连续
		// 	char ch = s[0];
		// 	int arr[5] = { 0, 0, 0, 0, 0 };
		// 	for (int i = 0; i < len; i++) {
		// 		if (s[i] != ch) {
		// 			arr[ch - '0']++;
		// 			ch = s[i];
		// 		}
		// 	}
		// 	int minEle = arr[0] < arr[1] ? arr[0] : arr[1];
		// 	cout << a * len + (minEle + 1) * b << endl;
		// } else if (a <= 0 && b > 0) {
		// 	// 一个一个弄
		// 	cout << (a + b) * len << endl;
		// } else if (a >= 0 && b <= 0) {
		// 	// 尽量连续
		// 	char ch = s[0];
		// 	int arr[5] = { 0, 0, 0, 0, 0 };
		// 	for (int i = 0; i < len; i++) {
		// 		if (s[i] != ch) {
		// 			arr[ch - '0']++;
		// 			ch = s[i];
		// 		}
		// 	}
		// 	int minEle = arr[0] < arr[1] ? arr[0] : arr[1];
		// 	cout << a * len + (minEle + 1) * b << endl;
		// } else if (a >= 0 && b > 0) {
		// 	// 一个一个弄
		// 	cout << (a + b) * len << endl;
		// }
	}

	return 0;
}