package main

import . "fmt"
import . "math/big"

func main() {
	var t int
	Scan(&t)
	for ;t>0;t-- {
		var d,ax,ay int64
		Scan(&d, &ax, &ay)
		switch {
			case ax == 0:
				Println(d*ay)
			case ay == 0:
				Println(d*ax)
			default:
				m := new(Int).GCD(nil, nil, NewInt(ax), NewInt(ay)).Int64()
				dx,dy := ay/m, ax/m
				var s int64
				if bx,by := ax-(ax/dx)*dx,ay+(ax/dx)*dy; (0<=bx&&bx<ax)&&(ay<by&&by<=d) {
					tmp := by*(ax*2-bx)-ax*ay-(ax-bx)*(by-ay)
					s = max(s, tmp)
				}
				if bx,by := ax-((d-ay)/dy)*dx,ay+((d-ay)/dy)*dy; (0<=bx&&bx<ax)&&(ay<by&&by<=d) {
					tmp := by*(ax*2-bx)-ax*ay-(ax-bx)*(by-ay)
					s = max(s, tmp)
				}
				if bx,by := ax+(ay/dy)*dx,ay-(ay/dy)*dy; (ax<bx&&bx<=d)&&(0<=by&&by<ay) {
					tmp := bx*(ay*2-by)-ax*ay-(bx-ax)*(ay-by)
					s = max(s, tmp)
				}
				if bx,by := ax+((d-ax)/dx)*dx,ay-((d-ax)/dx)*dy; (ax<bx&&bx<=d)&&(0<=by&&by<ay) {
					tmp := bx*(ay*2-by)-ax*ay-(bx-ax)*(ay-by)
					s = max(s, tmp)
				}
				Println(s)
		}
	}
}

func max(a, b int64) int64 {
	if a > b {
		return a
	} else {
		return b
	}
}