Multiple keys not detected at once

I’m making a 2D platformer using this code, and when the player holds down either the left or right arrow key, then presses the jump button, the jump doesn’t work and only works once they release the key. The script doesn’t seem to detect more than one key being pressed at once, why is this?

void Update () {

        float xvel = GetComponent<Rigidbody2D>().velocity.x;
        float yvel = GetComponent<Rigidbody2D>().velocity.y;

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(xvel, jumpHeight);
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(-1*moveSpeed, yvel);
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, yvel);

When you manually set velocity like that, you effectively erase whatever physics were acting on your object. While you’re accounting for that by only changing the velocity component that corresponds to your key presses, your logical priority here is:

RIGHT: counted above all else
LEFT: only counted when right isn't pressed
UP: only be counted when nothing else is pressed

You need to incorporate that jump height another way. I don’t like changing velocity directly for exactly that reason, but we’ll do that here since it’s closest to your original setup and the journey is the destination:

// Cache your rigidbody.  Either assign this in the inspector
// or do a GetComponent<> from Start or Awake.
//
public Rigidbody rigidbody;

void Update () {

    float xvel = rigidbody.velocity.x;
    float yvel = rigidbody.velocity.y;

    if (Input.GetKeyDown(KeyCode.UpArrow))
    {
        yvel = jumpHeight;
    }

    if (Input.GetKey(KeyCode.LeftArrow))
    {
        xvel = -moveSpeed;
    }

    if (Input.GetKey(KeyCode.RightArrow))
    {
        xvel = moveSpeed;
    }
    rigidbody.velocity = new Vector2(xvel, yvel);
}